SQL分组取最大值的方法

您所在的位置:网站首页 sql重复字段只显示一条 有并列条件怎么办 SQL分组取最大值的方法

SQL分组取最大值的方法

2023-08-25 06:11| 来源: 网络整理| 查看: 265

写这篇博文是为了帮助遇到同样问题的人,希望对你有用~

问题:求怎么查出同一课程id中时间最大的记录?(如下图所示)

1、刚开始想通过group by 分组课程id, 然后获取最大值,如下:

SELECT MAX(l.learn_time) FROM learn l where l.user_id = '14201109' GROUP BY l.course_id

查出来结果如下:

但是我想要查出来所有的字段,于是select后面加上 learn.*,嗯,应该没问题了,如下:

SELECT MAX(l.learn_time), l.* FROM learn l where l.user_id = '14201109' GROUP BY l.course_id

但查出来的结果出乎我的意料,你是不是也没想到,两列的时间字段竟然不一样!!!

由此想 MAX(l.learn_time)最大时间 应该是和 后面的learn.*记录没有直接关系的。

一开始是这样想的,通过时间逆排序,

select learn.* from learn where learn.user_id = '14201109' ORDER BY learn.learn_time DESC

然后在通过课程id分组应该就可以获取到了,但是排序order by必须放在分组group by 之后,像下面这样

select learn.* from learn where learn.user_id = '14201109' GROUP BY course_id ORDER BY learn.learn_time DESC

结果发现learn_id 是1和6,通过group by分组之后它就只能取到的是这两条,这两条记录恰恰是时间最小的,而我们想要的是learn_id 为5和9的最大时间,经过这一番折磨,实在不知道怎么解决了,发了个求救信息,不一会儿,在同学的帮助下,就解决了只个问题,其实刚开始的思路是对的,就是先查到最大时间,再外边嵌套查询就好了,如下:

正确答案:

SELECT * from learn where learn.learn_time in ( SELECT MAX(l.learn_time) FROM learn l where l.user_id = '14201109' GROUP BY l.course_id )

其实刚开始我也这样想过,但是我是把in写的等号“=”,结果一直报错说内嵌套只能查出来一条记录才可以,当时脑子短路,咋就没想到用in【/捂脸】【/捂脸】【/捂脸】,希望你们不要像我一样犯同样的错误。

突然想起来忘了说,我用的是mysql数据库

最后,大家如果发现我写的有错误的话,欢迎评论指出哦,共同进步。觉得我写的不错的,可以关注下哦^v^



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3